package com.example.server.web.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.server.web.domain.StudentQuestionnaire;
import com.example.server.web.domain.page.PageQueryDto;
import com.example.server.web.domain.dto.StuQuestionnaireParamDto;
import com.example.server.web.domain.page.TableDataInfo;
import com.example.server.web.domain.vo.StuQuestionnaireVo;
import com.example.server.web.exception.CustomException;
import com.example.server.web.mapper.StudentQuestionnaireMapper;
import com.example.server.web.service.QuestionnaireService;
import com.example.server.web.service.StudentQuestionnaireService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 作者
 * @since 2023-04-26
 */
@Service
public class StudentQuestionnaireServiceImpl extends ServiceImpl<StudentQuestionnaireMapper, StudentQuestionnaire> implements StudentQuestionnaireService {

    @Autowired
    private StudentQuestionnaireMapper studentQuestionnaireMapper;

    @Autowired
    private QuestionnaireService questionnaireService;

    @Transactional(rollbackFor = Exception.class)
    @Override
    public void updateLog(StudentQuestionnaire studentQuestionnaire) {
        if(studentQuestionnaire.getId()==null){
            throw new CustomException("学生问卷id不能为空");
        }
        studentQuestionnaire.setStatus(1);
        int update = studentQuestionnaireMapper.updateById(studentQuestionnaire);
        if(update < 1 ){
            throw new CustomException("更新失败");
        }
        //更新问卷已完成评测人数
        questionnaireService.addCompleteSum(studentQuestionnaire.getQuestionnaireId());
    }

    @Override
    public List<StudentQuestionnaire> getLog(Long questionnaireId, Long userId) {
        //构建条件
        LambdaQueryWrapper<StudentQuestionnaire> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq((questionnaireId != null),StudentQuestionnaire::getQuestionnaireId,questionnaireId);
        wrapper.eq((userId != null),StudentQuestionnaire::getUserId,userId);
        //查询
        List<StudentQuestionnaire> studentQuestionnaires = studentQuestionnaireMapper.selectList(wrapper);
        // if (studentQuestionnaires.size() > 1){
        //     throw new CustomException("获得问卷记录超过了两条，请联系管理员");
        // }
        if (CollectionUtils.isEmpty(studentQuestionnaires)){
            throw new CustomException("不存在此问卷！");
        }
        return studentQuestionnaires;
    }

    @Override
    public TableDataInfo<StuQuestionnaireVo> getPageByQnId(StuQuestionnaireParamDto paramDto, PageQueryDto pageQueryDto) {
        Page<StuQuestionnaireVo> page = studentQuestionnaireMapper.getPageByQnId(pageQueryDto.build(), paramDto);
        return TableDataInfo.build(page);
    }

    @Override
    public List<StudentQuestionnaire> getList(LambdaQueryWrapper<StudentQuestionnaire> queryWrapper2) {
        return studentQuestionnaireMapper.selectList(queryWrapper2);
    }
}
